home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / BASIC / SHOW_X.BAS < prev    next >
BASIC Source File  |  2000-09-29  |  10KB  |  487 lines

  1. $INCLUDE "REGNAMES.INC"
  2. CLS
  3.  
  4. PRINT "Show!  -  Version 0.9  -  Copyright (C) 1993 by Thomas Dreibholz"
  5.  
  6. IF CheckVector(&H49)=0 THEN
  7.  PRINT "FEHLER: File Transfer ist nicht aktiv."
  8.  PRINT "        FILE.EXE wurde nicht durch die CONFIG.SYS eingebunden!"
  9.  GOTO ende
  10. END IF
  11.  
  12. IF CheckVector(&H33)=0 THEN
  13.  PRINT "FEHLER: Maustreiber nicht vorhanden!"
  14.  GOTO ende
  15. END IF
  16.  
  17. REG %AX,0
  18. CALL INTERRUPT &H33
  19. IF REG(%AX)=0 THEN
  20.  PRINT "FEHLER: Fehler bei Reset des Maustreibers!"
  21.  GOTO ende
  22. END IF
  23. tasten=REG(%BX)
  24.  
  25. REG %AX,(&H6*256)
  26. CALL INTERRUPT &H49
  27. jseg=REG(%ES)
  28. janus=REG(%DI)
  29.  
  30. REG %AX,(&H4F*256)
  31. REG %ES,jseg
  32. REG %DI,janus
  33. CALL INTERRUPT &H10
  34. IF REG(%AX)<>&H4F THEN
  35.  PRINT "FEHLER: Es ist keine SuperVGA-Karte installiert, oder der"
  36.  PRINT "        VESA-Treiber wurde nicht in die CONFIG.SYS eingebunden."
  37.  GOTO ende
  38. END IF
  39.  
  40. REG %AX,(&H4F*256)+&H01
  41. REG %CX,&H101
  42. REG %ES,jseg
  43. REG %DI,janus
  44. CALL INTERRUPT &H10
  45. IF REG(%AX)<>&H4F THEN
  46.  PRINT "FEHLER: SuperVGA-Karte untersttzt den Modus $101 (640*480 bei 256 Farben)"
  47.  PRINT "        nicht. Diese Aufl”sung wird aber mindestens ben”tigt."
  48. END IF
  49.  
  50. DEF SEG = jseg
  51. m101.Segment=PEEKI(janus+8)
  52. m101.Add=PEEKI(janus+4)
  53. m101.File=OpenAmiga("M:Display640")
  54. IF m101.File=-1 THEN
  55.  PRINT "FEHLER: Die Datei SYS:PC/ATUtilities/Display640.cdat l„át sich"
  56.  PRINT "        nicht ”ffnen."
  57.  GOTO ende
  58. END iF
  59. m101.FileOkay=100
  60.  
  61. REG %AX,(&H4F*256)+&H01
  62. REG %CX,&H103
  63. REG %ES,jseg
  64. REG %DI,janus
  65. CALL INTERRUPT &H10
  66. IF REG(%AX)=&H4F THEN
  67.  DEF SEG = jseg
  68.  m103.Okay=100
  69.  m103.Segment=PEEKI(janus+8)
  70.  m103.Add=PEEKI(janus+4)
  71.  m103.File=OpenAmiga("M:Display800")
  72.  IF m103.File=-1 THEN
  73.   PRINT "FEHLER: Die Datei SYS:PC/ATUtilities/Display800.cdat l„át sich"
  74.   PRINT "        nicht ”ffnen."
  75.   GOTO ende
  76.  END iF
  77.  m103.FileOkay=100
  78. END IF
  79.  
  80. DIM bilder$(10)
  81. bilder$(0)="CC:Prgs/F11.cdat"
  82. bilder$(1)="CC:Prgs/T1.cdat"
  83. bilder$(2)="CC:Prgs/F12.cdat"
  84. bilder$(3)="CC:Prgs/J1.cdat"
  85. bilder$(4)="CC:Prgs/F13.cdat"
  86. bilder$(5)="CC:Prgs/Newton.cdat"
  87. bilder$(6)="CC:Prgs/F14.cdat"
  88. bilder$(7)="CC:Prgs/F640*480.cdat"
  89. bilder$(8)="CC:Prgs/F800*600.cdat"
  90. bilder=8
  91. richtung=1
  92. wiederholung=0
  93.  
  94. bool=1 : bildFH=-1 : bnum=0
  95. WHILE bool=1
  96.  IF bnum<>-1 THEN
  97.   bild$=bilder$(bnum)
  98.   IF bildFH<>-1 THEN CALL CloseAmiga(bildFH)
  99.   CALL LadeBild
  100.   CALL LadePalette
  101.   FOR schleife=0 TO 15000
  102.    IF INKEY$<>"" OR bildFH=-1 OR Button<>0 THEN
  103.     WHILE Button<>0 : WEND
  104. q:
  105.     f=Schalter
  106.     IF f=0 THEN richtung=-1 : GOTO neu
  107.     IF f=1 THEN richtung=1 : GOTO neu
  108.     IF f=2 THEN bnum=0 : GOTO weiter
  109.     IF f=3 THEN bnum=bilder : GOTO weiter
  110.     IF f=4 THEN
  111.      WHILE INKEY$="":WEND
  112.      GOTO q
  113.     END IF
  114.     IF f=7 THEN GOTO ende
  115.     IF bildFH=-1 THEN GOTO weiter
  116.    END IF
  117.   NEXT
  118.  ELSE
  119.   GOTO q
  120.  END IF
  121. neu:
  122.  bnum=bnum+richtung
  123.  IF wiederholung=1 THEN
  124.   IF bnum>bilder THEN bnum=0
  125.   IF bnum<0 THEN bnum=bilder
  126.  ELSE
  127.   IF bnum>bilder OR bnum<0 THEN bnum=-1
  128.  END IF
  129. weiter:
  130. WEND
  131.  
  132. ende:
  133. SCREEN 0
  134. CLS
  135. IF bildFH<>-1 THEN CALL CloseAmiga(bildFH)
  136. IF m103.FileOkay THEN CALL CloseAmiga(m103.File)
  137. IF m101.FileOkay THEN CALL CloseAmiga(m101.File)
  138. SOUND 1500,2
  139. PRINT "bye!"
  140. END
  141.  
  142.  
  143. FUNCTION CheckVector(num) STATIC
  144.  REG %AX,(&H35*256)+num
  145.  CALL INTERRUPT &H21
  146.  segm&=REG(%ES)
  147.  offs&=REG(%BX)
  148.  DEF SEG = segm&
  149.  IF (segm&=0) OR (PEEK(offs&)=207) THEN
  150.   CheckVector=0
  151.  ELSE
  152.   CheckVector=1
  153.  END IF
  154. END FUNCTION
  155.  
  156. FUNCTION OpenAmiga(n$) SHARED
  157.  n$=n$+CHR$(0)
  158.  DEF SEG = jseg
  159.  FOR i=1 TO LEN(n$)
  160.   POKE janus+i-1,ASC(MID$(n$,i,1))
  161.  NEXT
  162.  REG %AX,&H0*256
  163.  REG %BX,1
  164.  CALL INTERRUPT &H49
  165.  IF REG(%AX)=10000 THEN
  166.   OpenAmiga=REG(%BX)
  167.  ELSE
  168.   OpenAmiga=-1
  169.  END IF
  170. END FUNCTION
  171.  
  172. SUB CloseAmiga(handle) STATIC
  173.  REG %AX,&H1*256
  174.  REG %BX,handle
  175.  CALL INTERRUPT &H49
  176. END SUB
  177.  
  178. SUB SeekAmiga(handle,p) STATIC
  179.  REG %AX,&H7*256
  180.  REG %BX,handle
  181.  REG %CX,p
  182.  CALL INTERRUPT &H49
  183. END SUB
  184.  
  185. FUNCTION ReadAmiga(handle,length) STATIC
  186.  REG %AX,&H2*256
  187.  REG %BX,handle
  188.  REG %CX,length
  189.  CALL INTERRUPT &H49
  190.  ReadAmiga=REG(%BX)
  191. END FUNCTION
  192.  
  193. SUB CopyToPC(s,o&,length) STATIC
  194.  REG %AX,&H5*256
  195.  REG %BX,s
  196.  REG %DX,o&
  197.  REG %CX,length
  198.  CALL INTERRUPT &H49
  199. END SUB
  200.  
  201. SUB SelectRAM(num) STATIC
  202.  REG %AX,(&H4F*256)+&H05
  203.  REG %BX,0
  204.  REG %DX,num
  205.  CALL INTERRUPT &H10
  206. END SUB
  207.  
  208. SUB SelectMode(num) SHARED
  209.  REG %AX,(&H4F*256)+&H02
  210.  REG %BX,num
  211.  CALL INTERRUPT &H10
  212.  IF mode=&H103 THEN
  213.   segment=m103.Segment
  214.   add=m103.Add
  215.  ELSE
  216.   segment=m101.Segment
  217.   add=m101.Add
  218.  END IF
  219.  modus=num
  220. END SUB
  221.  
  222. SUB LadePalette SHARED
  223.  d=ReadAmiga(bildFH,4)
  224.  DEF SEG = jseg
  225.  farben=PEEK(janus+3)
  226.  IF CHR$(PEEK(janus+0))="P" THEN
  227.   d=ReadAmiga(bildFH,3*255)
  228.   IF d>0 THEN
  229.    anzcols=d/3
  230.    REG %AX,(&H10*256)+&H12
  231.    REG %BX,0
  232.    REG %CX,INT(d/3)
  233.    REG %ES,jseg
  234.    REG %DX,janus
  235.    CALL INTERRUPT &H10
  236.   END IF
  237.  ELSE
  238.   p=janus
  239.   IF farben<253 THEN farben=farben+3
  240.   s=INT(farben/3)
  241.   s2=s+s
  242.   FOR i=1 TO s
  243.    s3=15+(i*(240/s))
  244.    POKE p+0,i
  245.    POKE p+1,i
  246.    POKE p+2,s3
  247.    POKE p+s,s3
  248.    POKE p+s+1,s3
  249.    POKE p+s+2,i
  250.    POKE p+s2,s3
  251.    POKE p+s2+1,i
  252.    POKE p+s2+2,i
  253.    p=p+3
  254.   NEXT
  255.   REG %AX,(&H10*256)+&H12
  256.   REG %BX,0
  257.   REG %CX,255
  258.   REG %ES,jseg
  259.   REG %DX,janus
  260.   CALL INTERRUPT &H10
  261.  END IF
  262. END SUB
  263.  
  264. SUB LadeBild SHARED
  265.  bild=0
  266.  bildFH=OpenAmiga(bild$)
  267.  IF bildFH<>-1 THEN
  268.   d=ReadAmiga(bildFH,8)
  269.   IF d=8 THEN
  270.    DEF SEG = jseg
  271.    IF CHR$(PEEK(janus+0))="C" AND CHR$(PEEK(janus+1))="D" AND CHR$(PEEK(janus+2))="A" AND CHR$(PEEK(janus+3))="T" THEN
  272.     w=PEEK(janus+4)*256+PEEK(janus+5)
  273.     h=PEEK(janus+6)*256+PEEK(janus+7)
  274.     IF w=800 THEN
  275.      modus=&H103
  276.      IF m103.Okay<>100 THEN
  277.       modus=0
  278.      END IF
  279.     ELSE
  280.      modus=&H101
  281.     END IF
  282.     IF modus<>0 THEN
  283.      size&=w*h
  284.      CALL SelectMode(modus)
  285.      IF REG(%AX)=&H4F THEN
  286.       bild=1
  287.       CALL Lade(bildFH,w*h)
  288.      END IF
  289.     ELSE
  290.      SOUND 1500,5
  291.     END IF
  292.    ELSE
  293.     SOUND 1500,5
  294.    END IF
  295.   ELSE
  296.    SOUND 1500,5
  297.   END IF
  298.  ELSE
  299.   SOUND 1500,5
  300.  END IF
  301. END SUB
  302.  
  303. SUB Lade(fh,size&) SHARED
  304.  p&=0 : d&=0 : bytes=1 : s=0
  305.  WHILE d&<size&
  306.   IF d&+16384>size& THEN l=size&-d& ELSE l=16384
  307.   bytes=ReadAmiga(fh,l)
  308.   CALL CopyToPC(segment,p&,bytes)
  309.   p&=p&+bytes
  310.   d&=d&+bytes
  311.   IF p&>65535 THEN
  312.    s=s+1
  313.    p&=0
  314.    CALL SelectRAM(s)
  315.   END IF
  316.  WEND
  317. END SUB
  318.  
  319. SUB SetPal(farbe,r,g,b) STATIC
  320.  REG %AX,(&H10*256)+&H10
  321.  REG %BX,farbe
  322.  REG %CX,(g*256)+b
  323.  REG %DX,(r*256)
  324.  CALL INTERRUPT &H10
  325. END SUB
  326.  
  327. SUB DrawX(x,y,sw,w,farbe) STATIC
  328.  xs=(y*sw)+x
  329.  FOR i=xs TO xs+w
  330.   POKE i,farbe
  331.  NEXT
  332. END SUB
  333.  
  334. SUB DrawY(x,y,sw,h,farbe) STATIC
  335.  FOR i=y TO y+h
  336.   POKE (i*sw)+x,farbe
  337.  NEXT
  338. END SUB
  339.  
  340. SUB DrawBox(x,y,w,h,farbe) SHARED
  341.  DEF SEG = segment
  342.  IF modus=&H103 THEN sw=800 ELSE sw=640
  343.  CALL DrawX(x,y,sw,w,farbe)
  344.  CALL DrawX(x,y+h,sw,w,farbe)
  345.  CALL DrawY(x,y,sw,h,farbe)
  346.  CALL DrawY(x+w,y,sw,h,farbe)
  347. END SUB
  348.  
  349. SUB Draw3dBox(x,y,w,h,farbe1,farbe2) SHARED
  350.  DEF SEG = segment
  351.  IF modus=&H103 THEN sw=800 ELSE sw=640
  352.  CALL DrawX(x,y,sw,w,farbe1)
  353.  CALL DrawX(x,y+h,sw,w,farbe2)
  354.  CALL DrawY(x,y,sw,h,farbe1)
  355.  CALL DrawY(x+w,y,sw,h,farbe2)
  356. END SUB
  357.  
  358. FUNCTION Button STATIC
  359.  REG %AX,3
  360.  CALL INTERRUPT &H33
  361.  Button=REG(%BX)
  362. END FUNCTION
  363.  
  364. FUNCTION Schalter SHARED
  365.  DIM cx(4),dx(4)
  366.  IF bildFH=-1 THEN
  367.   CALL SelectMode(&H101)
  368.  END IF
  369.  CALL SelectRAM(0)
  370.  j=0
  371.  FOR i=12 TO 15
  372.   REG %AX,(&H10*256)+&H15
  373.   REG %BX,i
  374.   CALL INTERRUPT &H10
  375.   cx(j)=REG(%CX)
  376.   dx(j)=REG(%DX)
  377.   j=j+1
  378.  NEXT
  379.  CALL SetPal(12,255,255,80)
  380.  CALL SetPal(13,160,160,180)
  381.  CALL SetPal(14,0,0,0)
  382.  CALL SetPal(15,255,255,255)
  383.  IF modus=&H103 THEN
  384.   rx=800 : ry=600
  385.   CALL SeekAmiga(m103.File,8)
  386.   CALL Lade(m103.File,48800)
  387.  ELSE
  388.   rx=640 : ry=480
  389.   CALL SeekAmiga(m101.File,8)
  390.   CALL Lade(m101.File,39040)
  391.  END IF
  392.  
  393.  tex$="Show: DH0:Test-Verzeichnis/Test.slide     Bild: "+bild$
  394.  tex$=tex$+"Aufl”sung:"+STR$(rx)+" *"+STR$(ry)
  395.  DEF SEG = jseg
  396.  FOR i=1 TO LEN(tex$)
  397.   POKE janus+i-1,ASC(MID$(tex$,i,1))
  398.  NEXT
  399.  REG %AX,(&H13*256)+0
  400.  REG %BX,12
  401.  REG %CX,LEN(tex$)
  402.  REG %DX,(3*256)+1
  403.  REG %ES,jseg
  404.  REG %BP,janus
  405.  CALL INTERRUPT &H10
  406.  
  407.  REG %AX,&H0B
  408.  CALL INTERRUPT &H33
  409.  ende1=1
  410.  IF wiederholung=1 THEN
  411.   CALL Draw3dBox(5+(6*78),10,75,25,14,15)
  412.  END IF
  413.  gad=0 : ogad=0 : old=0 : down=0 : wahl=-1
  414.  CALL DrawBox(4,9,77,27,12)
  415.  i$=""
  416.  WHILE ende1=1
  417.   REG %AX,&H0B
  418.   CALL INTERRUPT &H33
  419.   i$=INKEY$
  420.   last=(REG(%CX)/4)+old
  421.   IF last<-6 OR i$="4" THEN
  422.    IF gad>0 THEN gad=gad-1
  423.    old=0
  424.   ELSEIF last>6 OR i$="6" THEN
  425.    IF gad<7 THEN gad=gad+1
  426.    old=0
  427.   ELSE
  428.    old=last
  429.   END IF
  430.   IF gad<>ogad THEN
  431.     IF down=1 THEN
  432.      CALL Draw3dBox(5+(ogad*78),10,75,25,15,14)
  433.      down=0
  434.     END IF
  435.     CALL DrawBox(4+(ogad*78),9,77,27,13)
  436.     CALL DrawBox(4+(gad*78),9,77,27,12)
  437.    ogad=gad
  438.   END IF
  439.   o=Button
  440.   IF o>1 OR i$=CHR$(27) THEN
  441.    ende1=0
  442.   ELSE
  443.    IF o=1 OR i$=CHR$(13) THEN
  444.     IF gad=6 THEN
  445.      IF wiederholung=0 THEN
  446.       CALL Draw3dBox(5+(6*78),10,75,25,14,15)
  447.       wiederholung=1
  448.      ELSE
  449.       CALL Draw3dBox(5+(6*78),10,75,25,15,14)
  450.       wiederholung=0
  451.      END IF
  452.      WHILE Button<>0 : WEND
  453.     ELSE
  454.      CALL Draw3dBox(5+(gad*78),10,75,25,14,15)
  455.      down=1
  456.     END IF
  457.    ELSE
  458.     IF down=1 THEN
  459.      CALL Draw3dBox(5+(gad*78),10,75,25,15,14)
  460.      wahl=gad
  461.      down=0
  462.      ende1=0
  463.     END IF
  464.    END IF
  465.   END IF
  466.  WEND
  467.  IF bild=1 THEN
  468.   IF modus=&H103 THEN
  469.    CALL SeekAmiga(bildFH,8)
  470.    CALL Lade(bildFH,48800)
  471.   ELSE
  472.    CALL SeekAmiga(bildFH,8)
  473.    CALL Lade(bildFH,39040)
  474.   END IF
  475.  END IF
  476.  j=0
  477.  FOR i=12 TO 15
  478.   REG %AX,(&H10*256)+&H10
  479.   REG %BX,i
  480.   REG %CX,cx(j)
  481.   REG %DX,dx(j)
  482.   CALL INTERRUPT &H10
  483.   j=j+1
  484.  NEXT
  485.  Schalter=wahl
  486. END FUNCTION
  487.